// 行数

var rows = 20;
// 列数
var cols = 20;
// 雷数
var bombs = 40;


// 存放所有td的二维数组
var tds = [];
var isOver = false;

// 创建扫雷表格

$("<table id='tb'></table>").appendTo($("body"));

for(var i = 0;i<rows;i++){
    var $tr = $("<tr></tr>");
    $tr.appendTo($("#tb"));


    var temp = [];

for(var j = 0;j<cols;j++){
        var $td = $("<td></td>")
        .attr("state","normal")
        .addClass("cell")
        .appendTo($tr);



        $td[0].y = i;
        $td[0].x = j;


        temp.push($td);
    }
    tds.push(temp);
}

// 随机生成所有类的位置。

// var x = Math.floor(Math.random()*20);
// var y = Math.floor(Math.random()*20);


// var arr = [0,1,2,3,4,5,6,7,8,9];
// var index = Math.floor(Math.random()*;


var nums = [];
for(var i = 0;i<rows*cols;i++){
    nums[i] = i;

}

for(var i = 0;i<bombs;i++){
    var ind = Math.floor(Math.random()*nums.length);
    var n = nums[ind];
    nums.splice(ind,1);
    // console.log(n);


    var r = Math.floor(n/cols);
    var c = n%cols;

    // consolelog("第"+r+"行，第"+c+"列");


    tds[r][c].attr("bomb","yes");
    
}

$(".cell").on("contextmenu",function(e){

    
    e.preventDefault();
});

// 给所有大额td 绑定点击事件


$(".cell").on("mousedown",function(e){
    if(isOver){
        return;
    }


    if(e.buttons == 1){
        // console.log("左键");

        if($(this).attr("state")!="normal"){
            return;
        }

        if($(this).attr("bomb")=="yes"){
            $(this).attr("state","bombex");
            gameover($(this));
        }else{
            // $(this).attr("state","open");
            // console.log(bombsNearby($(this)));
            openGrid($(this));


            if(checkWin()){
                alert("恭喜您过关了");
                isOver = true;
            }
            
        }
    }else if(e.buttons == 2){
        // console.log("右键");

        if($(this).attr("state")=="normal"){
            $(this).attr("state","flag");
        }else{
            $(this).attr("state","normal");
            
        }
    }
   

});



// 计算某个函数td周围有几克雷
function bombsNearby($td){
    var nums = 0;


    for(var i = $td[0].x - 1;i<=$td[0].x + 1;i++){
        for(var j = $td[0].y - 1;j<=$td[0].y + 1;j++)  {
            if(i==$td[0].x&&j==$td[0].y){
                continue;
            }
            if(i<0||i>=cols||j<0||j>=rows){
                continue;
            }
            if(tds[j][i].attr("bomb")=="yes"){
                nums++;

            }
        }
    }
    return nums;
}


// 游戏失败函数
function gameover($td){
    for(var i = 0;i<rows;i++){
        for(var j = 0;j<cols;j++){
            if(tds[i][j].attr("bomb")=="yes"){
                tds[i][j].attr("state","bombpl");
            }
        }
    }
    $td.attr("state","bombex");
    alert("GAME OVER");

    isOver = true;
}



// 打开格子

function openGrid($td){
    var num = bombsNearby($td);
    $td.attr("state","b"+num);

    if(num==0){
        for(var i = $td[0].x - 1;i<=$td[0].x + 1;i++){
            for(var j = $td[0].y - 1;j<=$td[0].y + 1;j++)  {
                if(i==$td[0].x&&j==$td[0].y){
                    continue;
                }
                if(i<0||i>=cols||j<0||j>=rows){
                    continue;
                }
                if(tds[j][i].attr("state")=="normal"){

                   openGrid(tds[j][i]);
    
                }
            }
        }
    }
}


// 判断是否胜利
function checkWin(){
   for(var i = 0;i<rows;i++){
       for(var j = 0;j<rows;j++){
           if(tds[i][j].attr("bomb")!="yes"&&tds[i][j].attr("state")=="normal"){
               return false;
           }

           
        }
    }
   
   return true;
}



$("#restart").on("click",function(){
    location.reload();
});

